<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<script src="jquery-1.4.2.min.js"></script>
<script>
$(document).ready(function(){
  function row(cells) {
    return '<tr>' + cells.join('') + '</tr>\n';
  }
  function cell(text, style, col) {
    return '<td' + (col? ' colspan="'+col+'"':'') + (style? ' style="'+style+'"':'') + '>' + text + '</td>';
  }
  var tags = {
    '4.1 The root element' : [
      {'tagName':'html','attr':['lang','manifest','contentEditable']}
    ],
    '4.2 Document metadata' : [
      {'tagName':'head','attr':['contentEditable']},
      {'tagName':'title','attr':['text','contentEditable']},
      {'tagName':'base','attr':['href','target','contentEditable']},
      {'tagName':'link','attr':['disabled','href','rel','relList','media','hreflang','type','sizes','title','contentEditable']},
      {'tagName':'meta','attr':['name','httpEquiv','content','charset','contentEditable']},
      {'tagName':'style','attr':['disabled','media','type','scoped','title','contentEditable']}
    ],
    '4.3 Scripting' : [
      {'tagName':'script','attr':['src','async','defer','type','charset','text','contentEditable']},
      {'tagName':'noscript','attr':['contentEditable']}
    ],
    '4.4 Sections' : [
      {'tagName':'body','attr':['onafterprint','onbeforeprint','onbeforeunload','onblur','onerror','onfocus','onhashchange','onload','onmessage','onoffline','ononline','onpagehide','onpageshow','onpopstate','onredo','onresize','onstorage','onundo','onunload','contentEditable']},
      {'tagName':'section','attr':['contentEditable']},
      {'tagName':'nav','attr':['contentEditable']},
      {'tagName':'article','attr':['contentEditable']},
      {'tagName':'aside','attr':['contentEditable']},
      {'tagName':'h1','attr':['contentEditable']},
      {'tagName':'h2','attr':['contentEditable']},
      {'tagName':'h3','attr':['contentEditable']},
      {'tagName':'h4','attr':['contentEditable']},
      {'tagName':'h5','attr':['contentEditable']},
      {'tagName':'h6','attr':['contentEditable']},
      {'tagName':'hgroup','attr':['contentEditable']},
      {'tagName':'header','attr':['contentEditable']},
      {'tagName':'footer','attr':['contentEditable']},
      {'tagName':'address','attr':['contentEditable']}
    ],
    '4.5 Grouping content' : [
      {'tagName':'p','attr':['contentEditable']},
      {'tagName':'hr','attr':['contentEditable']},
      {'tagName':'pre','attr':['contentEditable']},
      {'tagName':'blockquote','attr':['cite','contentEditable']},
      {'tagName':'ol','attr':['reversed','start','contentEditable']},
      {'tagName':'ul','attr':['contentEditable']},
      {'tagName':'li','attr':['value','contentEditable']},
      {'tagName':'dl','attr':['contentEditable']},
      {'tagName':'dt','attr':['contentEditable']},
      {'tagName':'dd','attr':['contentEditable']},
      {'tagName':'figure','attr':['contentEditable']},
      {'tagName':'figcaption','attr':['contentEditable']},
      {'tagName':'div','attr':['contentEditable']}
    ],
    '4.6 Text-level semantics' : [
      {'tagName':'a','attr':['href','target','rel','relList','media','hreflang','type','text','protocol','host','hostname','port','pathname','search','hash','contentEditable']},
      {'tagName':'em','attr':['contentEditable']},
      {'tagName':'strong','attr':['contentEditable']},
      {'tagName':'small','attr':['contentEditable']},
      {'tagName':'cite','attr':['contentEditable']},
      {'tagName':'q','attr':['cite','contentEditable']},
      {'tagName':'dfn','attr':['title','contentEditable']},
      {'tagName':'abbr','attr':['title','contentEditable']},
      {'tagName':'time','attr':['dateTime','pubDate','valueAsDate','contentEditable']},
      {'tagName':'code','attr':['contentEditable']},
      {'tagName':'var','attr':['contentEditable']},
      {'tagName':'samp','attr':['contentEditable']},
      {'tagName':'kbd','attr':['contentEditable']},
      {'tagName':'sub','attr':['contentEditable']},
      {'tagName':'sup','attr':['contentEditable']},
      {'tagName':'i','attr':['contentEditable']},
      {'tagName':'b','attr':['contentEditable']},
      {'tagName':'mark','attr':['contentEditable']},
      {'tagName':'ruby','attr':['contentEditable']},
      {'tagName':'rt','attr':['contentEditable']},
      {'tagName':'rp','attr':['contentEditable']},
      {'tagName':'bdo','attr':['dir']},
      {'tagName':'span','attr':['contentEditable']},
      {'tagName':'br','attr':['contentEditable']},
      {'tagName':'wbr','attr':['contentEditable']}
    ],
    '4.7 Edits' : [
      {'tagName':'ins','attr':['cite','datetime','contentEditable']},
      {'tagName':'del','attr':['cite','datetime','contentEditable']}
    ],
    '4.8 Embedded content' : [
      {'tagName':'img','attr':['alt','src','useMap','isMap','width','height','naturalWidth','naturalHeight','complete','contentEditable']},
      {'tagName':'iframe','attr':['src','srcdoc','name','sandbox','seamless','width','height','contentDocument','contentWindow','contentEditable']},
      {'tagName':'embed','attr':['src','type','width','height','contentEditable']},
      {'tagName':'object','attr':['data','type','name','useMap','form','width','height','contentDocument','contentWindow','willValidate','validity','validationMessage','chechValidity','setCustomValidity','contentEditable']},
      {'tagName':'param','attr':['name','value','contentEditable']},
      {'tagName':'video','attr':['src','poster','preload','autoplay','loop','controls','width','height','videoWidth','videoHeight','contentEditable']},
      {'tagName':'audio','attr':['src','preload','autoplay','loop','controls','contentEditable']},
      {'tagName':'source','attr':['src','type','media','contentEditable']},
      {'tagName':'canvas','attr':['width','height','toDataURL','getContext','contentEditable']},
      {'tagName':'map','attr':['name','areas','images','contentEditable']},
      {'tagName':'area','attr':['alt','coords','shape','href','target','rel','relList','media','hreflang','type','protocol','host','hostname','port','pathname','search','hash','contentEditable']}
    ],
    '4.9 Tabular data' : [
      {'tagName':'table','attr':['summary','caption','createCaption','deleteCaption','tHead','createTHead','deleteTHead','tFoot','createTFoot','deleteTFoot','tBodies','createTBody','rows','insertRow','deleteRow','contentEditable']},
      {'tagName':'caption','attr':['contentEditable']},
      {'tagName':'colgroup','attr':['span','contentEditable']},
      {'tagName':'col','attr':['span','contentEditable']},
      {'tagName':'tbody','attr':['rows','insertRow','deleteRow','contentEditable']},
      {'tagName':'thead','attr':['contentEditable']},
      {'tagName':'tfoot','attr':['contentEditable']},
      {'tagName':'tr','attr':['rowIndex','sectionRowIndex','cells','insertCell','deleteCell','contentEditable']},
      {'tagName':'td','attr':['colspan','rowspan','headers','contentEditable']},
      {'tagName':'th','attr':['colspan','rowspan','headers','scope','contentEditable']}
    ],
    '4.10 Forms' : [
      {'tagName':'form','attr':['acceptCharset','action','autocomplete','enctype','method','name','noValidate','target','elements','length','item','namedItem','submit','reset','checkValidity','dispatchFormInput','dispatchFormChange','contentEditable']},
      {'tagName':'fieldset','attr':['disabled','form','name','type','elements','willValidate','validity','validationMessage','checkValidity','setCustomValidity','contentEditable']},
      {'tagName':'legend','attr':['form','contentEditable']},
      {'tagName':'label','attr':['form','htmlFor','control','contentEditable']},
      {'tagName':'input','attr':['type=hidden','accept','alt','autocomplete','autofocus','defaultChecked','checked','disabled','form','files','formAction','formEnctype','formMethod','formNoValidate','formTarget','height','indeterminate','list','max','maxLength','min','multiple','name','pattern','placeholder','readOnly','required','size','src','step','defaultValue','value','valueAsDate','valueAsNumber','selectedOption','width','stepUp','stepDown','willValidate','validity','validationMessage','checkValidity','setCustomValidity','labels','select','selectionStart','selectionEnd','setSelectionRange','contentEditable']},
      {'tagName':'input','attr':['type=text','accept','alt','autocomplete','autofocus','defaultChecked','checked','disabled','form','files','formAction','formEnctype','formMethod','formNoValidate','formTarget','height','indeterminate','list','max','maxLength','min','multiple','name','pattern','placeholder','readOnly','required','size','src','step','defaultValue','value','valueAsDate','valueAsNumber','selectedOption','width','stepUp','stepDown','willValidate','validity','validationMessage','checkValidity','setCustomValidity','labels','select','selectionStart','selectionEnd','setSelectionRange','contentEditable']},
      {'tagName':'input','attr':['type=search','accept','alt','autocomplete','autofocus','defaultChecked','checked','disabled','form','files','formAction','formEnctype','formMethod','formNoValidate','formTarget','height','indeterminate','list','max','maxLength','min','multiple','name','pattern','placeholder','readOnly','required','size','src','step','defaultValue','value','valueAsDate','valueAsNumber','selectedOption','width','stepUp','stepDown','willValidate','validity','validationMessage','checkValidity','setCustomValidity','labels','select','selectionStart','selectionEnd','setSelectionRange','contentEditable']},
      {'tagName':'input','attr':['type=tel','accept','alt','autocomplete','autofocus','defaultChecked','checked','disabled','form','files','formAction','formEnctype','formMethod','formNoValidate','formTarget','height','indeterminate','list','max','maxLength','min','multiple','name','pattern','placeholder','readOnly','required','size','src','step','defaultValue','value','valueAsDate','valueAsNumber','selectedOption','width','stepUp','stepDown','willValidate','validity','validationMessage','checkValidity','setCustomValidity','labels','select','selectionStart','selectionEnd','setSelectionRange','contentEditable']},
      {'tagName':'input','attr':['type=url','accept','alt','autocomplete','autofocus','defaultChecked','checked','disabled','form','files','formAction','formEnctype','formMethod','formNoValidate','formTarget','height','indeterminate','list','max','maxLength','min','multiple','name','pattern','placeholder','readOnly','required','size','src','step','defaultValue','value','valueAsDate','valueAsNumber','selectedOption','width','stepUp','stepDown','willValidate','validity','validationMessage','checkValidity','setCustomValidity','labels','select','selectionStart','selectionEnd','setSelectionRange','contentEditable']},
      {'tagName':'input','attr':['type=email','accept','alt','autocomplete','autofocus','defaultChecked','checked','disabled','form','files','formAction','formEnctype','formMethod','formNoValidate','formTarget','height','indeterminate','list','max','maxLength','min','multiple','name','pattern','placeholder','readOnly','required','size','src','step','defaultValue','value','valueAsDate','valueAsNumber','selectedOption','width','stepUp','stepDown','willValidate','validity','validationMessage','checkValidity','setCustomValidity','labels','select','selectionStart','selectionEnd','setSelectionRange','contentEditable']},
      {'tagName':'input','attr':['type=password','accept','alt','autocomplete','autofocus','defaultChecked','checked','disabled','form','files','formAction','formEnctype','formMethod','formNoValidate','formTarget','height','indeterminate','list','max','maxLength','min','multiple','name','pattern','placeholder','readOnly','required','size','src','step','defaultValue','value','valueAsDate','valueAsNumber','selectedOption','width','stepUp','stepDown','willValidate','validity','validationMessage','checkValidity','setCustomValidity','labels','select','selectionStart','selectionEnd','setSelectionRange','contentEditable']},
      {'tagName':'input','attr':['type=datetime','accept','alt','autocomplete','autofocus','defaultChecked','checked','disabled','form','files','formAction','formEnctype','formMethod','formNoValidate','formTarget','height','indeterminate','list','max','maxLength','min','multiple','name','pattern','placeholder','readOnly','required','size','src','step','defaultValue','value','valueAsDate','valueAsNumber','selectedOption','width','stepUp','stepDown','willValidate','validity','validationMessage','checkValidity','setCustomValidity','labels','select','selectionStart','selectionEnd','setSelectionRange','contentEditable']},
      {'tagName':'input','attr':['type=date','accept','alt','autocomplete','autofocus','defaultChecked','checked','disabled','form','files','formAction','formEnctype','formMethod','formNoValidate','formTarget','height','indeterminate','list','max','maxLength','min','multiple','name','pattern','placeholder','readOnly','required','size','src','step','defaultValue','value','valueAsDate','valueAsNumber','selectedOption','width','stepUp','stepDown','willValidate','validity','validationMessage','checkValidity','setCustomValidity','labels','select','selectionStart','selectionEnd','setSelectionRange','contentEditable']},
      {'tagName':'input','attr':['type=month','accept','alt','autocomplete','autofocus','defaultChecked','checked','disabled','form','files','formAction','formEnctype','formMethod','formNoValidate','formTarget','height','indeterminate','list','max','maxLength','min','multiple','name','pattern','placeholder','readOnly','required','size','src','step','defaultValue','value','valueAsDate','valueAsNumber','selectedOption','width','stepUp','stepDown','willValidate','validity','validationMessage','checkValidity','setCustomValidity','labels','select','selectionStart','selectionEnd','setSelectionRange','contentEditable']},
      {'tagName':'input','attr':['type=week','accept','alt','autocomplete','autofocus','defaultChecked','checked','disabled','form','files','formAction','formEnctype','formMethod','formNoValidate','formTarget','height','indeterminate','list','max','maxLength','min','multiple','name','pattern','placeholder','readOnly','required','size','src','step','defaultValue','value','valueAsDate','valueAsNumber','selectedOption','width','stepUp','stepDown','willValidate','validity','validationMessage','checkValidity','setCustomValidity','labels','select','selectionStart','selectionEnd','setSelectionRange','contentEditable']},
      {'tagName':'input','attr':['type=time','accept','alt','autocomplete','autofocus','defaultChecked','checked','disabled','form','files','formAction','formEnctype','formMethod','formNoValidate','formTarget','height','indeterminate','list','max','maxLength','min','multiple','name','pattern','placeholder','readOnly','required','size','src','step','defaultValue','value','valueAsDate','valueAsNumber','selectedOption','width','stepUp','stepDown','willValidate','validity','validationMessage','checkValidity','setCustomValidity','labels','select','selectionStart','selectionEnd','setSelectionRange','contentEditable']},
      {'tagName':'input','attr':['type=datetime-local','accept','alt','autocomplete','autofocus','defaultChecked','checked','disabled','form','files','formAction','formEnctype','formMethod','formNoValidate','formTarget','height','indeterminate','list','max','maxLength','min','multiple','name','pattern','placeholder','readOnly','required','size','src','step','defaultValue','value','valueAsDate','valueAsNumber','selectedOption','width','stepUp','stepDown','willValidate','validity','validationMessage','checkValidity','setCustomValidity','labels','select','selectionStart','selectionEnd','setSelectionRange','contentEditable']},
      {'tagName':'input','attr':['type=number','accept','alt','autocomplete','autofocus','defaultChecked','checked','disabled','form','files','formAction','formEnctype','formMethod','formNoValidate','formTarget','height','indeterminate','list','max','maxLength','min','multiple','name','pattern','placeholder','readOnly','required','size','src','step','defaultValue','value','valueAsDate','valueAsNumber','selectedOption','width','stepUp','stepDown','willValidate','validity','validationMessage','checkValidity','setCustomValidity','labels','select','selectionStart','selectionEnd','setSelectionRange','contentEditable']},
      {'tagName':'input','attr':['type=range','accept','alt','autocomplete','autofocus','defaultChecked','checked','disabled','form','files','formAction','formEnctype','formMethod','formNoValidate','formTarget','height','indeterminate','list','max','maxLength','min','multiple','name','pattern','placeholder','readOnly','required','size','src','step','defaultValue','value','valueAsDate','valueAsNumber','selectedOption','width','stepUp','stepDown','willValidate','validity','validationMessage','checkValidity','setCustomValidity','labels','select','selectionStart','selectionEnd','setSelectionRange','contentEditable']},
      {'tagName':'input','attr':['type=color','accept','alt','autocomplete','autofocus','defaultChecked','checked','disabled','form','files','formAction','formEnctype','formMethod','formNoValidate','formTarget','height','indeterminate','list','max','maxLength','min','multiple','name','pattern','placeholder','readOnly','required','size','src','step','defaultValue','value','valueAsDate','valueAsNumber','selectedOption','width','stepUp','stepDown','willValidate','validity','validationMessage','checkValidity','setCustomValidity','labels','select','selectionStart','selectionEnd','setSelectionRange','contentEditable']},
      {'tagName':'input','attr':['type=checkbox','accept','alt','autocomplete','autofocus','defaultChecked','checked','disabled','form','files','formAction','formEnctype','formMethod','formNoValidate','formTarget','height','indeterminate','list','max','maxLength','min','multiple','name','pattern','placeholder','readOnly','required','size','src','step','defaultValue','value','valueAsDate','valueAsNumber','selectedOption','width','stepUp','stepDown','willValidate','validity','validationMessage','checkValidity','setCustomValidity','labels','select','selectionStart','selectionEnd','setSelectionRange','contentEditable']},
      {'tagName':'input','attr':['type=radio','accept','alt','autocomplete','autofocus','defaultChecked','checked','disabled','form','files','formAction','formEnctype','formMethod','formNoValidate','formTarget','height','indeterminate','list','max','maxLength','min','multiple','name','pattern','placeholder','readOnly','required','size','src','step','defaultValue','value','valueAsDate','valueAsNumber','selectedOption','width','stepUp','stepDown','willValidate','validity','validationMessage','checkValidity','setCustomValidity','labels','select','selectionStart','selectionEnd','setSelectionRange','contentEditable']},
      {'tagName':'input','attr':['type=file','accept','alt','autocomplete','autofocus','defaultChecked','checked','disabled','form','files','formAction','formEnctype','formMethod','formNoValidate','formTarget','height','indeterminate','list','max','maxLength','min','multiple','name','pattern','placeholder','readOnly','required','size','src','step','defaultValue','value','valueAsDate','valueAsNumber','selectedOption','width','stepUp','stepDown','willValidate','validity','validationMessage','checkValidity','setCustomValidity','labels','select','selectionStart','selectionEnd','setSelectionRange','contentEditable']},
      {'tagName':'input','attr':['type=submit','accept','alt','autocomplete','autofocus','defaultChecked','checked','disabled','form','files','formAction','formEnctype','formMethod','formNoValidate','formTarget','height','indeterminate','list','max','maxLength','min','multiple','name','pattern','placeholder','readOnly','required','size','src','step','defaultValue','value','valueAsDate','valueAsNumber','selectedOption','width','stepUp','stepDown','willValidate','validity','validationMessage','checkValidity','setCustomValidity','labels','select','selectionStart','selectionEnd','setSelectionRange','contentEditable']},
      {'tagName':'input','attr':['type=image','accept','alt','autocomplete','autofocus','defaultChecked','checked','disabled','form','files','formAction','formEnctype','formMethod','formNoValidate','formTarget','height','indeterminate','list','max','maxLength','min','multiple','name','pattern','placeholder','readOnly','required','size','src','step','defaultValue','value','valueAsDate','valueAsNumber','selectedOption','width','stepUp','stepDown','willValidate','validity','validationMessage','checkValidity','setCustomValidity','labels','select','selectionStart','selectionEnd','setSelectionRange','contentEditable']},
      {'tagName':'input','attr':['type=reset','accept','alt','autocomplete','autofocus','defaultChecked','checked','disabled','form','files','formAction','formEnctype','formMethod','formNoValidate','formTarget','height','indeterminate','list','max','maxLength','min','multiple','name','pattern','placeholder','readOnly','required','size','src','step','defaultValue','value','valueAsDate','valueAsNumber','selectedOption','width','stepUp','stepDown','willValidate','validity','validationMessage','checkValidity','setCustomValidity','labels','select','selectionStart','selectionEnd','setSelectionRange','contentEditable']},
      {'tagName':'input','attr':['type=button','accept','alt','autocomplete','autofocus','defaultChecked','checked','disabled','form','files','formAction','formEnctype','formMethod','formNoValidate','formTarget','height','indeterminate','list','max','maxLength','min','multiple','name','pattern','placeholder','readOnly','required','size','src','step','defaultValue','value','valueAsDate','valueAsNumber','selectedOption','width','stepUp','stepDown','willValidate','validity','validationMessage','checkValidity','setCustomValidity','labels','select','selectionStart','selectionEnd','setSelectionRange','contentEditable']},
      {'tagName':'button','attr':['autofocus','disabled','form','formAction','formEnctype','formMethod','formNoValidate','formTarget','name','type','value','willValidate','validity','validationMessage','checkValidity','setCustomValidity','labels','contentEditable']},
      {'tagName':'select','attr':['autofocus','disabled','form','multiple','name','size','type','options','length','item','namedItem','add','remove','selectedOptions','selectedIndex','value','willValidate','validity','validationMessage','checkValidity','setCustomValidity','labels','contentEditable']},
      {'tagName':'datalist','attr':['options','contentEditable']},
      {'tagName':'optgroup','attr':['disabled','label','contentEditable']},
      {'tagName':'option','attr':['disabled','form','label','defaultSelected','selected','value','text','index','contentEditable']},
      {'tagName':'textarea','attr':['autofocus','cols','disabled','form','maxLength','name','placeHolder','readOnly','required','rows','wrap','type','defaultValue','value','textLength','willValidate','validity','validationMessage','checkValidity','setCustomValidity','labels','select','selectionStart','selectionEnd','setSelectionRange','contentEditable']},
      {'tagName':'keygen','attr':['autofocus','challenge','disabled','form','keytype','name','type','willValidate','validity','validationMessage','checkValidity','setCustomValidity','labels','contentEditable']},
      {'tagName':'output','attr':['htmlFor','form','name','type','defaultValue','value','willValidate','validity','validationMessage','checkValidity','setCustomValidity','labels','contentEditable']},
      {'tagName':'progress','attr':['value','max','position','form','labels','contentEditable']},
      {'tagName':'meter','attr':['value','min','max','low','high','optimum','form','labels','contentEditable']}
    ],
    '4.11 Interactive elements' : [
      {'tagName':'details','attr':['open','contentEditable']},
      {'tagName':'summary','attr':['contentEditable']},
      {'tagName':'command','attr':['type','label','icon','disabled','checked','radiogroup','title','contentEditable']},
      {'tagName':'menu','attr':['type','label','contentEditable']}
    ]
  },
  str = '';
  str += '<table cellpadding="3" cellspacing="0" border="1" width="100%">';
  for(var i in tags) {
    str += row([cell(i, 'background:#E0E0EF', 2)]);
    for(var j=0,x=tags[i].length; j<x; j++) {
      var result = false;
      try {
        var tmp = document.createElement(tags[i][j].tagName);
        tmp['data-test'] = 'test-value';
        if(tags[i][j].attr.length>0) {
          for(var k=0,y=tags[i][j].attr.length; k<y; k++) {
            if(tags[i][j].attr[k].indexOf('=')>-1) {
              var fields = tags[i][j].attr[k].split('=');
              if(tmp[fields[0]] !== undefined) {
                tmp[fields[0]] = fields[1];
                result = true;
              }
            } else {
              if(tmp[tags[i][j].attr[k]] !== undefined)
                result = true;
            }
          }
        } else {
          result = true;
        }
      } catch(e) {
      } finally {
        str += row(
          [
            cell('<strong>'+tags[i][j].tagName+'</strong>'+' <sub>['+tags[i][j].attr.join(', ')+']</sub>'),
            cell(
              '<strong>'+(result? 'yes':'no')+'</strong>',
              (result? 'background:#60DF60':'background:#DF6060')+';width:50px'
            )
          ]
        );
      }
    }
  }
  $('#panel').html(str+'</table>');
});
</script>
</head>
<body>
<div id="panel"></div>
</body>
</html>